package com.grupoconstruobras.sigo.general.util;


import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;

/**
 * Clase creada para contener funciones genéricas para el uso de las
 * Entidades
 * 
 * @author fabio.navarrete
 */
public class EntitiesUtils {

  private static final Properties propertieEntrega = null;

  public static final Properties getEntregaBienesBundle() {

    if (propertieEntrega != null) {
      return propertieEntrega;
    }

    URL url = Thread.currentThread().getContextClassLoader()
                    .getResource("EntregaBienes.properties");
    Properties props = new Properties();

    if (url != null) {
      try {
        InputStream in = url.openStream();
        props.load(in);
      } catch (IOException ioe) {
      }
    }
    return props;
  }

  /**
   * Retorna el valor date correspondiente al comienzo de día para la
   * fecha ingresada como parámetro
   * 
   * @param date
   * @return
   * @author fabio.navarrete
   */
  public static Date getStartOfDay(Date date) {
    return clearTime(date);
  }

  /**
   * Retorna la fecha con los valores inferiores al día puestos en
   * ceros
   * 
   * @param date
   * @return
   * @author fabio.navarrete
   */
  public static Date clearTime(Date date) {
    if (date == null) {
      return null;
    }
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.HOUR_OF_DAY, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    return c.getTime();
  }

  /**
   * Retorna el valor date correspondiente al final del día para la
   * fecha ingresada como parámetro
   * 
   * @param date
   * @return
   * @author fabio.navarrete
   */
  public static Date getEndOfDay(Date date) {
    if (date == null) {
      return null;
    }
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    c.set(Calendar.HOUR_OF_DAY, 23);
    c.set(Calendar.MINUTE, 59);
    c.set(Calendar.SECOND, 59);
    c.set(Calendar.MILLISECOND, 999);
    return c.getTime();
  }

  /**
   * @param templateString
   * @param values
   * @return
   * @author fabio.navarrete
   */
  public static final String replaceValuesIntoString(String templateString,
      Map<String, String> values) {
    for (Entry<String, String> e : values.entrySet()) {
      templateString = templateString.replaceAll("\\[" + e.getKey() + "\\]", e.getValue());
    }
    return templateString;
  }
}
